<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>嗯</title>
</head>
<body>

数据库的增删改查
insert into article(no,ti) values('','');
delete article where no=?;
update article set ti=?,con=? where no=?;
select no,ti,con from article order by no;

CRUD: Create Retrieve Update Delete

使用PHP来操作数据库
1.链接数据库
    $conn = mysql_connect(host,user,pwd,dbname);
2.执行SQL语句
    $result = $mysqli_query($conn,$sql);
3.读取执行结果
    DML: mysqli_affected_rows($conn); // 查询行数
    DQL: mysqli_fetch_row($result); // 抓取行

使用PHP读取查询结果集
1.$conn = mysqli_connect();
2.$result = mysqli_query($conn,'SELECT...');
3.while($row = mysqli_fetch_array($result)){};
注意： 任何动态语言，执行select语句返回值都不是查询结果集;

PHP 数组变量与JSON字符串之间的转换
  把数组转换为JSON 字符串 $str = json_encode($arr);
  把JSON 字符串转换为数组 $arr = json_decode($str);
  注意：ajax应用很常见。

$_GET,$_POST和$_REQUEST


<!-- ======================================================= -->

网络模型：
    ISO(国际标准化组织)/OSI(开放式系统互联/OSI参考模型):
      7层(应用，表示，会话，传输，网络，数据链路，物理)
    TCP/IP:
      应用层 HTTP(80) HTTPS(443) FTP TELNET(23)/SSH(22)/VNC DNS POP3 SMTP
      传输层 TCP(可靠传输，一对一) UDP(一对多)
      网络层 IP
      网络访问层

web组成：

web访问过程：1.DNS查询，2.DNS服务器响应，3.HTTP请求(request)，4.web服务器处理请求，5.HTTP响应(response);
  1.客户端在浏览中输入URL
  2.客户端系统做DNS解析，获得目标服务器的IP地址
  3.客户端操作系统打开一个自由端口，向服务器发起连接请求
  4.经过三次握手，服务器端确认与该客户端的链接，打开一个自由端口与该客户端通信。
  5.客户端开始发请求数据————以4KB为大小的一个又一个请求数据包—————发送HTTP Request
  6.服务器开始接收请求数据包，接收完成后开始处理数据 Request Handler
  7.服务器开始向客户端发送响应数据，以4KB为大小的相应数据(操作系统和网卡) HTTP Response
  8.响应结束之后，服务器会经过四次握手，断开连接，关闭各自的自由端口

<!-- ============================================================================================== -->

HTTP1.0 Offline
HTTP1.1 Connection：keep-Alive
http/1.1 相较于 http/1.0 增加了 持久链接，虚拟主机，代理链接

HTTP协议：❤
  Hyper Text Transfer Protocol 是TCP/IP 协议栈/族中“应用层”的一个协议，用于在S和C(B)之间传递超文本内容(HTML/JS/CSS/图片/音视频)
  (MIME:Multipurpose Internet Mail Extension 多用途的互联网邮件扩展，在电子邮件中指定附件文件类型的扩展表达方式 - image/jpeg)
    image/jpeg  .jpg
    text/html   .html
    application/json .json


统一资源识别符
  URI： Unified Resource Identifier ↓ 包含URL和URN
  URL： Unified Resource Locator 如：http://www.baidu.com/q?kw=js
  URN： Unified Resource Naming 如：mailto:admin@163.com.cn

URL的完整格式：
  scheme://user:pwd@host:port/path;params?query#frag
    - js 中的encodeURI()函数不会对：/@;?#进行编码
         encodeURIComponent()函数会对上述标点进行编码

HTTP协议详解 ❤
  RFC: Request For Comment (www.rfc.org)一项协议在正式发布之前专家制定的意见征求稿 如：RFC-405
  http 协议的详细格式也是由一篇RFC文档确定的，其中规定了两种消息格式
  Request Message 请求消息/报文
  Response Message 响应消息/报文
每个消息都分为三个部分
  1.起始行 CRLF
  2.消息报头 1CRLF
    消息报头 2CRLF
    ...
    CRLF
  3.消息正文 CRLF

--> 请求消息的三部分
    1.起始行/请求行
        请求方法 请求URI 所用协议 CRLF
    2.消息头/请求头
    3.消息主体/请求正文


--> 响应消息的三部分
    2.起始行/响应行
    2.消息头/响应头
    3.消息主体/响应正文


  请求方法：指定客户单相对指定的资源/服务器做何种操作；
    1) GET     指名客户端想要从服务器获取指定的资源
    2) POST    指定客户端想发送给服务器的一些数据 (有请求体)
    3) PUT     指明客户端想让服务器保存某个资源 (有请求体)
    4) DELETE  指明客户端想让服务器删除某个资源
    5) HEAD    指明客户端只想查看指定资源的响应头部信息，不要资源本身
    6) TRACE   客户端可以对请求消息的传输路径进行追踪
    7) OPTIONS 客户端询问服务器。

  最常见的请求方法：
    1.GET  浏览器直接输入URL、页面内容解析时引用外部资源、超链接跳转、JS跳转、GET方式提交表单
    2.POST post方式提交表单

    手写一个请求
    GET /src/ic.html HTTP/1.1
    Host:127.0.0.1

    POST /2.php HTTP/1.1
    Host:127.0.0.1:8080
    Connection:keep-alive 保持连接
    Cotent-Length: 507 长度为507个字节
    Cache-Control: max-age=0 缓存控制
    Accept: text/html,application/xhtml+xml,*/*;q=0.8  告诉服务器我可以接收的mime类型
    Origin: http://127.0.0.1 来源
    User-Agent: ...  客户端类型，告诉服务器浏览器类型.
    Content-Type: multipart/form-data; boundary=----WebkitFormBoundary ... (encType)指定客户端提交数据的类型
    Referer:http://127.0.0.1/2.php
    Accept-Encoding:gzio,deflate
    Accept-Language:zh-CN,zh:q=0.8

    ------WebKitFormBoundaryqrt...   边界分隔符
    Content-Disposition: from-data: name="..."

    ...
    ------WebKitFormBoundaryqrt...
    Content-Disposition: from-data: name="..."; filename="red.png"
    Content-Type: image/png

    ...
    ------WebKitFormBoundaryqrt...


</body>
</html>
